Linux Magic SysRq

·

在 Linux 中,Magic SysRq(Magic System Request)键 是一个组合键机制,用于在系统严重故障(如死机、挂起等)时发送低级命令给内核进行恢复或诊断操作。它能在几乎所有情况下(包括部分内核崩溃)执行,如同步磁盘、重启、杀死进程等。

前提条件检查

内核是否编译支持Magic SysRq 检查当前运行状 0:全部禁用 1:全部启用 其他值(如 176、438):按位启用(详见附录)

zcat /proc/config.gz | grep CONFIG_MAGIC_SYSRQ
cat /boot/config-$(uname -r) | grep -i config_magic_sysrq
cat /proc/sys/kernel/sysrq

发行版Magic SysRq使用情况

很多Linux发行版中是默认启用的,但具体情况可能会有所不同。例如:

  1. Debian及其衍生发行版(如Ubuntu)通常默认开启Magic SysRq功能。
  2. Arch Linux及其相关发行版(如Manjaro)则默认情况下不开启Magic SysRq功能,用户需要手动进行配置以启用它。 如果你不确定某个特定的Linux发行版是否默认启用了Magic SysRq,可以通过以下命令来检查当前系统的Magic SysRq状态:
cat /proc/sys/kernel/sysrq

如果输出为1,则表示所有Magic SysRq功能都已启用;如果输出为0,则表示SysRq被禁用。其他数值表示部分功能被启用,具体的数值含义可以参考内核文档或通过搜索引擎查找对应的解释。

要临时启用所有的Magic SysRq功能,可以使用以下命令:

echo 1 | sudo tee /proc/sys/kernel/sysrq

对于永久性更改,可以在/etc/sysctl.conf文件中添加或者修改如下行:

kernel.sysrq = 1

然后运行sudo sysctl -p使更改生效,或者重启系统。不同的发行版可能有不同的配置文件位置和方法,请根据实际情况调整。

如何使用Magic SysRq

键盘组合方式(本地终端使用)

Alt + SysRq + <command_key>

SysRq 键通常和 Print Screen 是同一个键 在笔记本上可能需要额外按 Fn 键

常见命令键列表(<command_key>):

功能
b立即重启系统(ReBoot)
o立即关闭系统(pOwer off)
s立刻将所有挂载的文件系统同步(Sync)
u立刻将文件系统 remount 为只读(Umount)
e向所有终端进程发送 SIGTERM(tErminate)
i向所有终端进程发送 SIGKILL(kIll)
r将键盘控制权从 X Server 还原到控制台(Raw mode)
k杀死当前控制台上的所有进程(Kill)
h显示可用命令帮助(Help)

通过 /proc/sysrq-trigger 发送命令(远程使用)

如果你是通过 SSH 或串口登录的,可以使用:

echo <command_key> | sudo tee /proc/sysrq-trigger
echo b | sudo tee /proc/sysrq-trigger   # 立即重启
echo s | sudo tee /proc/sysrq-trigger   # 同步磁盘

典型场景:安全重启挂死系统

建议使用“REISUB”组合重启挂住的系统:

Alt + SysRq + R
Alt + SysRq + E
Alt + SysRq + I
Alt + SysRq + S
Alt + SysRq + U
Alt + SysRq + B

含义如下:

步骤含义
R恢复键盘控制权
E终止所有进程
I杀死所有进程
S同步磁盘
U卸载磁盘(只读)
B重启系统

每按一次组合键后,等1-2秒再继续下一步,确保命令有时间生效。

附录:sysrq 按位权限含义(对应 /proc/sys/kernel/sysrq)

功能
1启用所有功能
2控制进程的信号发送
4挂载的文件系统 sync
8立即重启或关机
16Dump tasks 信息
32设置日志等级
64终止进程
128Kill 当前控制台进程

常见值: 176 = 128 + 32 + 16:允许 kill、日志、重启

438 = 128 + 64 + 8 + 4 + 2 + 32:广泛启用但不包含 r

cat /proc/sys/kernel/sysrq | xxd -b

Categories